1
Жизненный цикл локальных объектов: автоматический против статического
AI037Lesson 10
00:00

В театре C++ каждый объект имеет срок жизни — срок жизни объекта. Это определяет продолжительность, на которую объект занимает место в памяти. Внутри тела функции, поведение по умолчанию для локальных переменных заключается в том, чтобы быть автоматическим, но мы можем заставить их быть статическими чтобы изменить их судьбу.

1. Автоматические объекты

По умолчанию локальные переменные являются автоматическими объектами. Они рождаются (инициализируются), когда выполнение функции достигает их определения, и погибают (освобождаются), когда блок завершается. Они находятся в стеке, что делает их свежими при каждом вызове.

2. Локальные статические объекты

Когда вы используете ключевое слово статическими , вы создаете локальный статический объект. Они инициализируются только один раз — до первого прохода управления через их определение — и остаются живыми до завершения программы. Это позволяет функции «помнить» состояние, не загрязняя глобальное пространство имён.

Стек (Автоматический)[ temp_val ]Уничтожается в конце блокаСегмент данных (Статический)[ persistent_val ]Живёт до выхода из программы

3. Ловушка рекурсии

В рекурсивной функции, каждый цикл рекурсии создаёт отдельную копию своих автоматических объектов. Если рекурсия глубокая, это потребляет значительное пространство стека. Напротив, объект статическими общий для всех уровней этой рекурсии.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>